import { getStore, setStore } from '@/util/store'
import { sendLogs } from '@/api/admin/log'

export const dateFormat = date => {
  let format = 'yyyy-MM-dd hh:mm:ss'
  if (date !== 'Invalid Date') {
    const o = {
      'M+': date.getMonth() + 1, // month
      'd+': date.getDate(), // day
      'h+': date.getHours(), // hour
      'm+': date.getMinutes(), // minute
      's+': date.getSeconds(), // second
      'q+': Math.floor((date.getMonth() + 3) / 3), // quarter
      S: date.getMilliseconds() // millisecond
    }
    if (/(y+)/.test(format)) {
      format = format.replace(RegExp.$1, `${date.getFullYear()}`.substr(4 - RegExp.$1.length))
    }
    for (const k in o) {
      if (new RegExp(`(${k})`).test(format)) {
        format = format.replace(RegExp.$1, RegExp.$1.length === 1 ? o[k] : `00${o[k]}`.substr(`${o[k]}`.length))
      }
    }
    return format
  }
  return ''
}

export default {
  namespaced: true,
  state: {
    logsList: getStore('logsList') || []
  },
  actions: {
    async sendLogs({ state, commit }) {
      await sendLogs(state.logsList)
      commit('clearLogs')
    }
  },
  mutations: {
    addLog(state, { type, message, stack, info }) {
      state.logsList.push({
        id: state.logsList.length,
        url: window.location.href,
        time: dateFormat(new Date()),
        type,
        message,
        stack,
        info: info.toString()
      })
      setStore('logsList', state.logsList)
    },
    clearLogs(state) {
      state.logsList = []
      setStore('logsList', state.logsList)
    }
  },
  getters: {
    size(state) {
      return state.logsList.length
    }
  }
}
